/*
 * Copyright 2006-2023 www.anyline.org
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package org.anyline.util;


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.Map.Entry;


@Component("anyline.util.spring.context")
public class SpringContextUtil implements ApplicationContextAware {
	 
	public static ApplicationContext applicationContext;
	public static void init(ApplicationContext applicationContext){
		SpringContextUtil.applicationContext = applicationContext;
	}
	@Override
	public void setApplicationContext(ApplicationContext ac) throws BeansException {
		SpringContextUtil.applicationContext = ac;
		ConfigTable.setEnvironment(ac.getEnvironment());
	}

	 
	public static ApplicationContext getApplicationContext() {  
		return applicationContext; 
    }   
	 
    public static Object getBean(String name) throws BeansException {
		if(applicationContext.containsBean(name)) {
			return applicationContext.getBean(name);
		}else{
			return null;
		}
    }  
    public static <T> Map<String, T> getBeans(Class<T> clazz) throws BeansException{
    	return applicationContext.getBeansOfType(clazz); 
    }  
    public static <T> T getBean(Class<T> clazz) throws BeansException{
    	Map<String, T> beans = getBeans(clazz);
    	if(null != beans && !beans.isEmpty()){
    		for(Entry<String, T> set:beans.entrySet()){
    			T bean = set.getValue();
    			if(null != bean){
    				return bean;
    			}
    		}
    	}
    	return null;
    }

} 
